#include "bits/stdc++.h"
using namespace std;


/**
 * @brief 给你一个字符串数组 words ，请你找出所有在 words 的每个字符串中都出现的共用字符（包括重复字符），并以数组形式返回。你可以按 任意顺序 返回答案。
 * 
 */
class Solution {

public:
    vector<string> commonChars(vector<string>& words) {
        int n = words.size();
        vector<vector<int>> alpha_cnt(n, vector<int>(26, 0));

        for (int i = 0; i < n; ++i) {
            for (const char &ch : words[i]) {
                ++alpha_cnt[i][ch - 'a'];
            }
        }

        vector<string> res;
        for (int i = 0; i < 26; ++i) {
            int cnt = alpha_cnt[0][i];
            for (int j = 0; j < n; ++j) {
                cnt = min(alpha_cnt[j][i], cnt);
            }
            if (cnt) {
                while (cnt--) {
                    res.push_back(string(1, i + 'a'));
                }
            }
        }

        return res;
    }
};